<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>async函数</title>
</head>
<body>

<!--
  async函数(源自ES2017)
  概念： 真正意义上去解决异步回调的问题，同步流程表达异步操作
  本质： Generator的语法糖
  语法：
      async function foo(){
        await 异步操作;
        await 异步操作；
      }
  特点：
    1、不需要像Generator去调用next方法，遇到await等待，当前的异步操作完成就往下执行
    2、返回的总是Promise对象，可以用then方法进行下一步操作
    3、async取代Generator函数的星号*，await取代Generator的yield
    4、语意上更为明确，使用简单，经临床验证，暂时没有任何副作用

-->
<script type="text/javascript" src="./js/jquery-1.10.1.min.js"></script>
<script type="text/javascript">

    // async
    async function foo() {
        return new Promise(resolve => {
            /*setTimeout(function () {
                resolve()
            },2000)*/
            setTimeout(resolve,2000)
        })
    }

    async function test() {
        console.log('开始执行',+(new Date()));
        await foo();
        console.log('执行结束',+(new Date()));
    }
    test();

    // async 里面 await返回值 就是 普通函数当前函数的返回值 prmise对象是成功或者失败的 传入参数
    function test2() {
        return 'test2';
    }

    async function  asyncPrint() {
        let retult=await test2()
        retult=await Promise.resolve('promise');
        retult=await Promise.reject('失败了。。。');
        retult=await Promise.resolve('还能执行吗');
        console.log(retult);
    }
    // asyncPrint();

    // 实例
     function getnews(url) {
        return new Promise((resolve,reject)=>{
          $.ajax({
              method:'GET',
              url,
              success:data=>resolve(data),
              error:data=>resolve(false),
          })
        })
    }

    async  function  sendXml() {
        let result=await getnews('http:xxxxx');
        console.log(result)
        if(!result){
            alert('失败了')
        }
        await getnews(result.url);
    }
    sendXml();
</script>

</body>
</html>